#ifndef ENGINE_SCENE_H
#define ENGINE_SCENE_H

#include <string>
#include <memory>

namespace GameEngine {

    class SceneManager; // 前向声明

    class Scene {
    public:
        Scene(const std::string& name) : m_name(name), m_isInitialized(false), m_isActive(false) {}
        virtual ~Scene() = default;

        // 当场景首次创建或加载时调用一次。
        virtual void OnCreate() = 0;

        // 当场景即将被销毁或卸载时调用一次。
        virtual void OnDestroy() = 0;

        // 当场景成为活动场景时调用。
        virtual void OnActivate() = 0;

        // 当场景不再是活动场景时调用。
        virtual void OnDeactivate() = 0;

        // 每帧调用以更新场景逻辑。
        virtual void Update(float deltaTime) = 0;

        // 每帧调用以渲染场景。
        virtual void Render() = 0;

        const std::string& GetName() const { return m_name; }
        bool IsInitialized() const { return m_isInitialized; }
        bool IsActive() const { return m_isActive; }

    protected:
        friend class SceneManager; // 允许 SceneManager 管理内部状态，如 m_isInitialized, m_isActive

        std::string m_name;
        bool m_isInitialized;
        bool m_isActive;
        SceneManager* m_sceneManager = nullptr;
    };

}

#endif
